<?php
// +------------------------------------------------+
// | http://www.cjango.com                          |
// +------------------------------------------------+
// | 修复BUG不是一朝一夕的事情，等我喝醉了再说吧！  |
// +------------------------------------------------+
// | Author: 小陈叔叔 <Jason.Chen[cjango.com]>      |
// +------------------------------------------------+
/**
 * 路由调度类
 */
class Router {

	/**
	 * URL解析调度
	 */
	static public function dispatch() {
		$depr      = C('URL_PATHINFO_DEPR');
		$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
		define('__INFO__', trim($path_info, '/'));
		$paths = explode($depr, __INFO__);
		// 获取模块
		define('MODULE',     self::getModule($paths));
		// 获取控制器
		define('CONTROLLER', self::getController($paths));
		// 获取方法
		define('ACTION',     self::getAction($paths));
	}

	/**
	 * 开始运行
	 */
	static public function run() {
		$controller = CONTROLLER.'Controller';
		if (class_exists($controller)) {
			$class = new $controller;
		} else {
			throw new Exception("Class Not Exists!");
		}
		$action = ACTION;
		$class->$action();
	}

	/**
	 * 获取模块
	 */
	static function getModule($paths) {
		$attr = !empty($paths[0]) ? $paths[0] : 'Home';
		if (in_array(strtolower($attr), array_map('strtolower', C('ALLOW_MODULE')))) {
			$module = $attr;
		} else {
			$module = C('DEFAULT_MODULE');
		}
		return ucfirst($module);
	}

	/**
	 * 获取控制器
	 */
	static function getController($paths) {
		if (MODULE == C('DEFAULT_MODULE')) {
			$controller = !empty($paths[0]) ? $paths[0] : 'Index';
		} else {
			$controller = !empty($paths[1]) ? $paths[1] : 'Index';
		}
		return ucfirst($controller);
	}

	/**
	 * 获取方法
	 */
	static function getAction($paths) {
		if (MODULE == C('DEFAULT_MODULE')) {
			$action = !empty($paths[1]) ? $paths[1] : 'Index';
		} else {
			$action = !empty($paths[2]) ? $paths[2] : 'index';
		}
		return strtolower($action);
	}
}